package com.jiang.专题.双指针.Q61;

/**
 * @author Jiang
 * @version 1.0
 * @date 2025/04/11 20:07
 */
public class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null) return null;

        ListNode t = head;
        int len = 1; // 链表长度
        while (t.next != null) {
            len++;
            t = t.next;
        }
        k = k % len; // 如果k大于链表长度，则取余数
        if (k == 0) return head; // 如果k等于0，则不需要旋转
        int cnt = 1;
        int index = len - k + 1; // 找到需要断开的位置
        ListNode temp = null;
        t = head;
        while (t.next != null) {
            cnt++;
            if (cnt == index) { // 找到需要断开的位置
                temp = t.next;
                t.next = null;
                t = temp;
                continue;
            }
            t = t.next;
        }
        t.next = head; // 将断开的位置的下一个节点指向头节点
        return temp;
    }
}
class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
